def
來表示return
,其實就是回傳 None
return
,當執行到其中一個後就會結束這個函式,不會執行後續內容def functionname( 參數1, 參數2=預設值 ):
程式碼區塊
return value1, value2
小補充
""" """
包起來的註解描述可被 IDE 或 vscode 這類編輯器讀取,在使用函式時把滑鼠移到函式上,就可以動態看到註解描述的說明內容__doc__
屬性def my_function():
"""Do nothing, but document it.
No, really, it doesn't do anything.
"""
pass
copy()
等方式/
*
=
來處理,就屬於非必要參數,未輸入就會使用預設值
fun(位置參數, 預設值參數)
__defaults__
看到def f(a, b):
print("a", a)
print("b", b)
f(5, 6)
# 依順序
# a 5
# b 6
f(b=5, a=6)
# 依參數名
# a 6
# b 5
參數
# 一般參數
def standard_arg(arg):
print(arg)
# 僅限位置引數
def pos_only_arg(arg, /):
print(arg)
# 僅限關鍵字引數
def kwd_only_arg(*, arg):
print(arg)
# 混合使用
def combined_example(pos_only, /, standard, *, kwd_only):
print(pos_only, standard, kwd_only)
可變物件
x = [1, 2]
def f(lst):
lst = lst.copy()
lst.append(3)
print("lst", lst)
f(x)
print(x)
# lst [1, 2, 3]
# [1, 2]
# 外部 x 未被改動
def f(lst):
lst.append(3)
print("lst", lst)
f(x)
print(x)
# lst [1, 2, 3]
# [1, 2, 3]
# 外部 x 已被改動
def f(a, L=[]):
L.append(a)
return L
def b(a, L=None):
if L is None:
L = []
L.append(a)
return L
print(f.__defaults__)
print(b.__defaults__)
# f() 已經建立一個 []
# ([],)
# (None,)
print(f(1))
print(b(1))
# [1]
# [1]
print(f.__defaults__)
print(b.__defaults__)
# f() 還保留上一次建立的 [1]
# ([1],)
# (None,)
print(f(2))
print(b(2))
# f() 以上一次建立的 [1] 再 append 2
# [1, 2]
# [2]
小補充
def func(foo, bar=None, **kwargs):
pass
func(42, bar=314, extra=somevar)
# foo、bar 和 kwargs 是 func 的參數
# 42、314 和 somevar 是引數
沒想到光參數就那麼多,還會繼續聊函式